package controllers;

import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;

import modelo.Usuario;
import services.UsuarioService;

@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioBean implements Serializable {


	private static final long serialVersionUID = -3219781222562395439L;

	private Usuario usuario;
    private UsuarioService serviceUsuario;

	public UsuarioBean() {
		super();
		serviceUsuario=new UsuarioService();
		usuario=new Usuario();
	}

	public String doLogin() throws NoSuchAlgorithmException  {
		MessageDigest md = null;
		String password = usuario.getContrasenia();
		// encripta la password
		md= MessageDigest.getInstance("MD5");
        md.update(password.getBytes());
        byte[] digest = md.digest();
		StringBuffer sb = new StringBuffer();
		for (byte b : digest) {
			sb.append(String.format("%02x", b & 0xff));
		}
        usuario.setContrasenia(sb.toString());
        
        boolean resultado = serviceUsuario.validarUsuario(usuario);
        
        if (resultado) {
        	FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_WARN, "Bienvenido!",	usuario.getNombreUsuario()));        	
            return "home";
        } else {
            FacesContext.getCurrentInstance().addMessage(
                    null,
                    new FacesMessage(FacesMessage.SEVERITY_WARN,
                    "Login Invalido!",
                    "Por favor intentelo de nuevo!"));
            return "login";
        }

	}

	public String registrarNuevoUsuario() {

		return "nuevo";
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public UsuarioService getServiceUsuario() {
		return serviceUsuario;
	}

	public void setServiceUsuario(UsuarioService serviceUsuario) {
		this.serviceUsuario = serviceUsuario;
	}
}
